package Tetris.Logica.Figuras;

/** @author Adrian Garcia Rojas
  * @author Aida Ruiz Maya
  * @author Héctor Daniel González Terán
  * @version 1.0 30/12/2010
  * Esta programa es un tetris para el proyecto final de ICC1
  * Profesora de Asignatura: Fernanda Sanchez Puig
  * Ayudante de Laboratorio: Manuel Alcántara Juárez
  */ 

import Tetris.utils.Punto2D;
import java.awt.Color;
/**
 * Clase que da la figura tetrimino2 en el tetris, de esta clase heredan todas las otras figuras del tetris 
 */
public class Tetrimino2 implements Figura{

    private final Color fill=new Color(0,0,240);
    private final Color border=new Color(179,179,251);
    protected Punto2D[] puntos0;
    protected Punto2D[] puntos90;
    protected Punto2D[] puntos180;
    protected Punto2D[] puntos270;
    protected int posicion;

    public Tetrimino2(){
        posicion=0;
        puntos0=new Punto2D[]{new Punto2D(0,0),new Punto2D(0,1),new Punto2D(1,1),new Punto2D(2,1)};
        puntos90=new Punto2D[]{new Punto2D(0,0),new Punto2D(1,0),new Punto2D(0,1),new Punto2D(0,2)};
        puntos180=new Punto2D[]{new Punto2D(0,0),new Punto2D(1,0),new Punto2D(2,0),new Punto2D(2,1)};
        puntos270=new Punto2D[]{new Punto2D(1,0),new Punto2D(1,1),new Punto2D(0,2),new Punto2D(1,2)};
    }
/**
 * Este metodo gira la pieza en cuestion a la derecha
 */
    public void rotateRigth(){
        posicion=(posicion+1)%4;
    }
/**
 * Este metodo gira la pieza en cuestion a la izquierda
 */
    public void rotateLeft(){
        posicion--;
        if(posicion<0){
            posicion=3;
        }
    }
/**
 * Este metodo
 * @return translate(new Punto2D())
 */
    public Punto2D[] getPuntos(){
        return translate(new Punto2D());
    }
/**
 * Este metodo regresa la posicion en donde se encuentra la figura dependiendo la rotacion que tenga esta
 * @param dxy 
 * @return aux
 */
    public Punto2D[] translate(Punto2D dxy) {
        Punto2D[] aux=new Punto2D[4];
        switch(posicion){
            case 1:
                for(int i=0;i<4;i++){
                    aux[i]=puntos90[i].clone();
                    aux[i].move(dxy.getX(), dxy.getY());
                }
                break;
            case 2:
                for(int i=0;i<4;i++){
                    aux[i]=puntos180[i].clone();
                    aux[i].move(dxy.getX(), dxy.getY());
                }
                break;
            case 3:
                for(int i=0;i<4;i++){
                    aux[i]=puntos270[i].clone();
                    aux[i].move(dxy.getX(), dxy.getY());
                }
                break;
            default:
                for(int i=0;i<4;i++){
                    aux[i]=puntos0[i].clone();
                    aux[i].move(dxy.getX(), dxy.getY());
                }
        }
        return aux;
    }

    /**
     * Este metodo devuelve el color de lo que va relleno el tetrimino2 (azul obscuro)
     * @return fill
     */
    public Color getFillColor(){
        return fill;
    }

    /**
     * Este metodo devuelve el color de los bordes del cuadrado
     * @return border
     */
    public Color getBorderColor(){
        return border;
    }
/**
 * Devuelve a la rotacion original
 */
    public void restablece() {
        posicion=0;
    }
}
